﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace AcademiaInteligenteData.DAL
{
    class DaoCliente : DaoConnection
    {
        public void InserirCliente(Cliente cliente)
        {
            string insertCliente = "ai_sp_inserirCliente";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", cliente.Id));
            parametros[0].Direction = System.Data.ParameterDirection.InputOutput;
            parametros.Add(new SqlParameter("@nome", cliente.Nome));
            parametros.Add(new SqlParameter("@cpf", cliente.Cpf));
            parametros.Add(new SqlParameter("@sexo", cliente.Sexo));
            parametros.Add(new SqlParameter("@altura", cliente.Altura));
            parametros.Add(new SqlParameter("@cep", cliente.Cep));
            parametros.Add(new SqlParameter("@endereco", cliente.Endereco));
            parametros.Add(new SqlParameter("@numero", cliente.Numero));
            parametros.Add(new SqlParameter("@complemento", cliente.Complemento));
            parametros.Add(new SqlParameter("@bairro", cliente.Bairro));
            parametros.Add(new SqlParameter("@cidade", cliente.Cidade));
            parametros.Add(new SqlParameter("@estado", cliente.Estado));
            parametros.Add(new SqlParameter("@login", cliente.Login));
            parametros.Add(new SqlParameter("@senha", cliente.Senha));
            parametros.Add(new SqlParameter("@data_inclusao", DateTime.Now));
            Executar(insertCliente, true, parametros);
            cliente.Id = Convert.ToInt32(parametros[0].Value);
        }
        public void AlterarCliente(Cliente cliente)
        {
            string alterarCliente = "ai_sp_alterarCliente";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", cliente.Id));
            parametros.Add(new SqlParameter("@nome", cliente.Nome));
            parametros.Add(new SqlParameter("@cpf", cliente.Cpf));
            parametros.Add(new SqlParameter("@sexo", cliente.Sexo));
            parametros.Add(new SqlParameter("@altura", cliente.Altura));
            parametros.Add(new SqlParameter("@cep", cliente.Cep));
            parametros.Add(new SqlParameter("@endereco", cliente.Endereco));
            parametros.Add(new SqlParameter("@numero", cliente.Numero));
            parametros.Add(new SqlParameter("@complemento", cliente.Complemento));
            parametros.Add(new SqlParameter("@bairro", cliente.Bairro));
            parametros.Add(new SqlParameter("@cidade", cliente.Cidade));
            parametros.Add(new SqlParameter("@estado", cliente.Estado));
            parametros.Add(new SqlParameter("@login", cliente.Login));
            parametros.Add(new SqlParameter("@senha", cliente.Senha));
            parametros.Add(new SqlParameter("@ativo", cliente.Ativo));
            Executar(alterarCliente, true, parametros);
        }
        public void ExcluirClientePorID(int id)
        {
            string excluirCliente = "ai_sp_excluirCliente";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id", id));
            Executar(excluirCliente, true, parametros);
        }
        public Cliente SelecionarClientePorID(int id)
        {
            string selecionaCliente = "ai_sp_selecionarCliente";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id", id));
            DataSet reader = Selecionar(selecionaCliente, true, parametros);
            int i = 0;
            Cliente cliente = new Cliente();
            cliente.Nome = Convert.ToString(reader.Tables[0].Rows[i]["nome"]);
            cliente.Login = Convert.ToString(reader.Tables[0].Rows[i]["login"]);
            cliente.Senha = Convert.ToString(reader.Tables[0].Rows[i]["senha"]);
            cliente.Endereco = Convert.ToString(reader.Tables[0].Rows[i]["endereco"]);
            cliente.Numero = Convert.ToString(reader.Tables[0].Rows[i]["numero"]);
            cliente.Complemento = Convert.ToString(reader.Tables[0].Rows[i]["complemento"]);
            cliente.Bairro = Convert.ToString(reader.Tables[0].Rows[i]["bairro"]);
            cliente.Cidade = Convert.ToString(reader.Tables[0].Rows[i]["cidade"]);
            cliente.Cep = Convert.ToString(reader.Tables[0].Rows[i]["cep"]);
            cliente.Estado = Convert.ToString(reader.Tables[0].Rows[i]["estado"]);
            cliente.Cpf = Convert.ToString(reader.Tables[0].Rows[i]["cpf"]);
            cliente.Sexo = Convert.ToString(reader.Tables[0].Rows[i]["sexo"]);
            cliente.Altura = Convert.ToDouble(reader.Tables[0].Rows[i]["altura"]);
            cliente.DataInclusao = Convert.ToDateTime(reader.Tables[0].Rows[i]["data_inclusao"]);
            cliente.Id = id;
            cliente.ClienteAcademia = SelecionarAcademiaCliente(cliente.Id);

            return cliente;
        }
        public Cliente SelecionarClientePorLoginSenha(string login, string senha)
        {
            Cliente cliente = new Cliente();
            string selecionaFuncionario = "ai_sp_selecionarUsuarioPorLoginSenha";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@login", login));
            parametros.Add(new SqlParameter("@senha", senha));
            DataSet reader = Selecionar(selecionaFuncionario, true, parametros);
            int i = 0;
            cliente.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
            cliente.Nome = Convert.ToString(reader.Tables[0].Rows[i]["nome"]);
            return cliente;
        }
        public List<Cliente> SelecionarClientePorAcademia(int idAcademia)
        {
            string selecionaCliente = "ai_sp_selecionarClientePorAcademia";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_academia", idAcademia));
            DataSet reader = Selecionar(selecionaCliente, true, parametros);
            List<Cliente> clientes = new List<Cliente>();
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Cliente cliente = new Cliente();
                cliente.Nome = Convert.ToString(reader.Tables[0].Rows[i]["nome"]);
                //cliente.Login = Convert.ToString(reader.Tables[0].Rows[i]["login"]);
                //cliente.Senha = Convert.ToString(reader.Tables[0].Rows[i]["senha"]);
                cliente.Endereco = Convert.ToString(reader.Tables[0].Rows[i]["endereco"]);
                cliente.Numero = Convert.ToString(reader.Tables[0].Rows[i]["numero"]);
                cliente.Complemento = Convert.ToString(reader.Tables[0].Rows[i]["complemento"]);
                cliente.Bairro = Convert.ToString(reader.Tables[0].Rows[i]["bairro"]);
                cliente.Cidade = Convert.ToString(reader.Tables[0].Rows[i]["cidade"]);
                cliente.Cep = Convert.ToString(reader.Tables[0].Rows[i]["cep"]);
                cliente.Estado = Convert.ToString(reader.Tables[0].Rows[i]["estado"]);
                cliente.Cpf = Convert.ToString(reader.Tables[0].Rows[i]["cpf"]);
                cliente.Sexo = Convert.ToString(reader.Tables[0].Rows[i]["sexo"]);
                cliente.Altura = Convert.ToDouble(reader.Tables[0].Rows[i]["altura"]);
                cliente.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                clientes.Add(cliente);

            }
            return clientes;
        }

        internal void RemoverClienteModalidade(int idCliente, int idModalidade, int idAcademia)
        {
            string selecionaEventos = "ai_sp_removerClienteModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_cliente", idCliente));
            parametros.Add(new SqlParameter("@id_modalidade_horario", idModalidade));
            parametros.Add(new SqlParameter("@id_academia", idAcademia));
            Executar(selecionaEventos, true, parametros);
        }

        internal void InserirClienteModalidade(int idCliente, int idModalidade, int idAcademia, double valor)
        {
            string selecionaEventos = "ai_sp_inserirClienteModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_cliente", idCliente));
            parametros.Add(new SqlParameter("@id_modalidade_horario", idModalidade));
            parametros.Add(new SqlParameter("@id_academia", idAcademia));
            parametros.Add(new SqlParameter("@valor", valor));
            Executar(selecionaEventos, true, parametros);
        }

        public List<Cliente> ListarCliente()
        {
            string selecionaCliente = "ai_sp_listarCliente";
            List<SqlParameter> parametros = new List<SqlParameter>();
            DataSet reader = Selecionar(selecionaCliente, true, parametros);
            List<Cliente> clientes = new List<Cliente>();
            DaoCliente_Pagamento daopagamentos = new DaoCliente_Pagamento();
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Cliente cliente = new Cliente();
                cliente.Nome = Convert.ToString(reader.Tables[0].Rows[i]["nome"]);
                cliente.Cpf = Convert.ToString(reader.Tables[0].Rows[i]["cpf"]);
                cliente.Sexo = Convert.ToString(reader.Tables[0].Rows[i]["sexo"]);
                cliente.Cep = Convert.ToString(reader.Tables[0].Rows[i]["cep"]);
                cliente.Endereco = Convert.ToString(reader.Tables[0].Rows[i]["endereco"]);
                cliente.Numero = Convert.ToString(reader.Tables[0].Rows[i]["Numero"]);
                cliente.Bairro = Convert.ToString(reader.Tables[0].Rows[i]["bairro"]);
                cliente.Estado = Convert.ToString(reader.Tables[0].Rows[i]["estado"]);
                cliente.Login = Convert.ToString(reader.Tables[0].Rows[i]["login"]);
                cliente.DataInclusao = Convert.ToDateTime(reader.Tables[0].Rows[i]["data_inclusao"]);
                cliente.Ativo = Convert.ToBoolean(reader.Tables[0].Rows[i]["Ativo"]);
                cliente.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                cliente.ClienteAcademia = SelecionarAcademiaCliente(cliente.Id);
                cliente.ClientePagamento = daopagamentos.ListarClientePagamentoPorCliente(cliente.Id);
                clientes.Add(cliente);
            }
            return clientes;
        }

        public List<Cliente_Academia> SelecionarAcademiaCliente(int idCliente)
        {
            string selecionaAcademiaCliente = "ai_sp_selecionarAcademiaUsuario";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_cliente", idCliente));
            DataSet reader = Selecionar(selecionaAcademiaCliente, true, parametros);
            List<Cliente_Academia> academias = new List<Cliente_Academia>();
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Academia academia = new Academia();
                academia.RazaoSocial = Convert.ToString(reader.Tables[0].Rows[i]["razao_social"]);
                academia.Fantasia = Convert.ToString(reader.Tables[0].Rows[i]["fantasia"]);
                academia.Cnpj = Convert.ToString(reader.Tables[0].Rows[i]["cnpj"]);
                academia.Cep = Convert.ToString(reader.Tables[0].Rows[i]["cep"]);
                academia.Endereco = Convert.ToString(reader.Tables[0].Rows[i]["endereco"]);
                academia.Numero = Convert.ToString(reader.Tables[0].Rows[i]["numero"]);
                academia.Complemento = Convert.ToString(reader.Tables[0].Rows[i]["complemento"]);
                academia.Bairro = Convert.ToString(reader.Tables[0].Rows[i]["bairro"]);
                academia.Cidade = Convert.ToString(reader.Tables[0].Rows[i]["cidade"]);
                academia.Estado = Convert.ToString(reader.Tables[0].Rows[i]["estado"]);
                academia.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                academia.Fone = Convert.ToString(reader.Tables[0].Rows[i]["telefone"]);
                Cliente_Academia academiaCliente = new Cliente_Academia();
                academiaCliente.Academia = academia;
                academiaCliente.data_inclusao = Convert.ToDateTime(reader.Tables[0].Rows[i]["data_matricula"]);
                academiaCliente.id_academia = academia.Id;
                academias.Add(academiaCliente);
            }
            return academias;
        }

        internal void AssociarAcademia(int idAcademia, int idCliente)
        {
            string selecionaEventos = "ai_sp_associarAcademia";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_academia", idAcademia));
            parametros.Add(new SqlParameter("@id_cliente", idCliente));
            Executar(selecionaEventos, true, parametros);
        }
    }
}
